package gestorchat;



import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.*;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Víctor
 */
public class Conversacion {
    protected Socket elsocket;
    protected String interlocutor;
    protected String login;
    protected ArrayList<String> logMsj;
    protected EscuchadorConversacion escuchador;
    private ObjectInputStream flujoEntrada;
    private ObjectOutputStream flujoSalida;
    private int estado;
    public Conversacion(Socket elsocket,EscuchadorConversacion escuchador,String login){
        this(elsocket,"noname",escuchador,login);
        
    }
    public Conversacion(Socket elsocket,String interlocutor,EscuchadorConversacion escuchador,String login){
       this.estado=0;
        this.elsocket=elsocket;
        this.login=login;
        this.interlocutor=interlocutor;
        this.escuchador=escuchador;
        try {
          System.out.println("Intentamos crear los flujos de la conversacion "+this.elsocket.getInetAddress());
                        this.flujoSalida=new ObjectOutputStream(this.elsocket.getOutputStream());
            System.out.println("Flujo de Salida");
            this.flujoEntrada=new ObjectInputStream(this.elsocket.getInputStream());
            System.out.println("Flujo de entrada creado ");

            
        } catch (IOException ex) {
            Logger.getLogger(Conversacion.class.getName()).log(Level.SEVERE, null, ex);
        }
        
    }
    
    public void escucharMensaje(){
        
        try {
            this.flujoEntrada=new ObjectInputStream(this.elsocket.getInputStream());
            MensajeChat msj=(MensajeChat) this.flujoEntrada.readObject();
            if(msj!=null){
                switch(msj.tipo){
                    case 0:
                        this.setInterlocutor(msj.msj);
                        if(this.estado==0){
                            this.mandarMsj(new MensajeChat(this.login,0));
                            this.estado=1;
                        }
                        this.escuchador.msjInicio(this);
                        
                        
                    break;
                    case 1:
                     this.escuchador.msjRecibido(this, msj.msj);      
                        break;
                    case 2:
                        this.escuchador.msjFin(this);  
                        break;
                }
             
            }
        } catch (IOException | ClassNotFoundException ex) {
            Logger.getLogger(Conversacion.class.getName()).log(Level.SEVERE, null, ex);
        }
        
    }
   public void setInterlocutor(String interlocutor){
       this.interlocutor=interlocutor;
   }         
    public void mandarMsj(MensajeChat msj){
        
        try {
            this.flujoSalida=new ObjectOutputStream(this.elsocket.getOutputStream());
            this.flujoSalida.writeObject(msj);
            System.out.println("Hemos mandado el mensaje "+msj.msj);
            if(msj.tipo==0){
                
                this.estado=1;
            }
        } catch (IOException ex) {
            Logger.getLogger(Conversacion.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    
}
